using System;
using System.Collections;

using FinancialAnalyzer.DataBase;
using System.Collections.Generic;
using FinancialAnalyzer.ToolClasses;

namespace FinancialAnalyzer.MoneyFlow
{
    [Serializable]
    public abstract class IMoneyFlowController : IEnumerable
    {
        public abstract EFlowDirection FlowDirection { get;}
        public abstract int Count { get;}
        public abstract Double SumValue { get;}

        public abstract override string ToString();

        public abstract int IndexOf(String className);
        public abstract int IndexOf(int classIndex, String year);
        public abstract int IndexOf(int classIndex, int yearIndex, String month);
        public abstract void Sum();
        public abstract List<KeyValuePaar<String, Double>> Find(String searchString);

        public abstract KeyValuePaar<IMoneyFlowItem, Double> this[int index]{ get;}
        public abstract Year this[String classname, String year] { get;}
        public abstract void registerMoneyFlow(IList<MoneyFlowItem> list);

        public abstract IList<KeyValuePaar<Year, Double>> getListofLevel0(String classname);
        public abstract IList<KeyValuePaar<Month, Double>> getListofLevel1(String classname, String year);
        public abstract IList<KeyValuePaar<String, Double>> getListofLevel2(String classname, String year, String month);

        public abstract void MonthChanged(int month);
        public abstract void YearChanged(int year);

        public abstract void undo();

        public abstract void redo();

        #region IEnumerable Member

        public abstract IEnumerator GetEnumerator();

        #endregion
    }
}
